<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // Promise 是异步编程的一种解决方案，比传统的解决方案——回调函数和事件——更合理和更强大。

    // 注意: Promise并没有改变异步执行机制, 而是通过封装处理 将代码变得更像同步

    // 传统的异步解决方案
    // setTimeout(function () { }, 500)

    // 所谓Promise，简单说就是一个容器，里面保存着某个未来才会结束的事件（通常是一个异步操作）的结果。从语法上说，Promise 是一个对象，从它可以获取异步操作的消息

    // 如何创建Promise?  => 构造函数创建(得到实例化对象)
    // 构造函数Promise,接收一个回调函数作为参数(容器),里面可以执行异步操作(同步也可以)

    // var p = new Promise(function () {
    //     // 容器 => 需要执行的代码(异步/同步) => 同步任务(Promise创建时立即执行)
    //     console.log("回调函数代码执行");
    // });

    // // 通过构造函数创建的对象 => 实例化对象
    // console.log(p);  // Promise实例/ Promise对象

    // p = {
    //     PromiseState:"pending", // Promise状态 (默认进行中)
    //     PromiseResult: undefined , // Promise的结果(存储数据)
    // }


    // Promise实例的状态
    // pending   进行中
    // fulfilled 已成功
    // rejected  已失败

    // 如何改变Promise实例的状态?
    //  构造函数Promise,接收一个回调函数作为参数(容器),里面可以执行异步操作(同步也可以),回调函数 有两个参数resolve,reject  用于改变Promise实例的状态
    // resolve()  将Promise实例的状态由pending(进行中) 改为 fulfilled(已成功)
    // reject()   将Promise实例的状态由pending(进行中) 改为 rejected(已失败)

    // resolve()/reject()  除了可以改变Promise实例的状态 还可以接收一个参数,作为Promise实例中存储的数据

    // 同步代码 => 立即改变状态
    // var p = new Promise(function (resolve, reject) { //形参
    //     // 容器 => 需要执行的代码(异步/同步) => 同步任务(Promise创建时立即执行)
    //     console.log("回调函数代码执行");
    //     for (var i = 1; i <= 10; i++) {
    //         console.log(i);
    //     }
    //     // resolve(true); // Promise {<fulfilled>: undefined}
    //     reject(false); // Promise {<rejected>: false}
    // });

    // console.log(p);


    debugger;

    // 异步代码 => 未来改变状态
    var p = new Promise(function (resolve, reject) { //形参
        // 容器 => 需要执行的代码(异步/同步) => 同步任务(Promise创建时立即执行) 
        debugger;
        console.log("回调函数代码执行");

        setTimeout(function () {
            debugger;
            for (var i = 1; i <= 10; i++) {
                console.log(i);
            }
            // resolve(true); // Promise {<fulfilled>: undefined}
            reject(false); // Promise {<rejected>: false}

            console.log("异步操作结束:", p);
        }, 2000);

    });

    console.log(p); // Promise <pending>




</script>

</html>